import os
import sys
import logging
from pathlib import Path
from PySide6.QtWidgets import QApplication, QMessageBox
from gui.main_window import MainWindow
from gui.styles import load_styles
def main():
    """
    应用程序入口点
    负责初始化日志、设置环境、创建主窗口并启动事件循环
    """
    logging.info("程序启动")
    window = None  # 提前声明主窗口变量，用于异常处理
    try:
        # 设置 Qt 插件路径（兼容打包后和开发环境）
        if getattr(sys, 'frozen', False):
            # 打包后的路径（使用临时资源目录）
            base_dir = getattr(sys, '_MEIPASS', os.path.abspath("."))
            os.environ['QT_PLUGIN_PATH'] = str(Path(base_dir) / 'PySide6' / 'plugins')
            os.environ['QML_IMPORT_PATH'] = str(Path(base_dir) / 'PySide6' / 'qml')
        else:
            # 开发环境路径
            os.environ['QT_PLUGIN_PATH'] = str(Path(sys.base_prefix) / 'Lib' / 'site-packages' / 'PySide6' / 'plugins')
        # 初始化应用程序
        app = QApplication(sys.argv)
        app.setStyleSheet(load_styles())  # 应用样式表
        # 创建并显示主窗口
        window = MainWindow()
        window.show()
        # 启动应用程序事件循环
        sys.exit(app.exec())
    except Exception as e:
        # 捕获并记录致命错误
        logging.error(f"致命错误: {str(e)}", exc_info=True)
        # 尝试显示错误消息（如果窗口已创建）
        if window is not None:
            QMessageBox.critical(window, "错误", f"运行时错误: {str(e)}")
        else:
            # noinspection PyTypeChecker
            QMessageBox.critical(None, "错误", f"初始化失败: {str(e)}")

if __name__ == "__main__":
    main()  # 程序入口